package com.example.music.service;

import com.example.music.common.ServerResponse;
import com.example.music.domain.*;
import com.github.pagehelper.PageInfo;
import org.json.JSONObject;

import java.util.List;

public interface UserService {
    User login(User user);

    List<Role> getRole();

    ServerResponse<String> register(User user);

    ServerResponse<String> generateCheckCode(String email);

    ServerResponse<String> forgetSendEmailCode(String email);

    ServerResponse<String> updatePassword(User user);

    void expertLogin(User expertLoginUser);

    ServerResponse<PageInfo> searchUser(Integer pageNum, Integer pageSize, String username);

    ServerResponse deleteUser(Integer id);

    ServerResponse uploadSong(Song song,List<Lyrics> lyricsList);

    ServerResponse getSongById(Integer songId);

    ServerResponse getSongByKind(Integer kindId, Integer pageNum, Integer pageSize,String keyword,User user);

    ServerResponse getSongKind();

    U3DSong getU3dSongInfo(Integer songId);

    ServerResponse getSong(User user, JSONObject jsonObject);

    ServerResponse updateHeadPortrait(Integer id, String headPortrait,User user);

//    ServerResponse getU3dByValue(Integer songId, User u,String selfSinging);

    ServerResponse getU3dByValue(Integer songId, String path, User u);


    ServerResponse getUserReportSong(Integer id,Integer pageNum,Integer pageSize,String keyword);

    ServerResponse delUserReportSong(Integer reportId);

    String downloadReportSong(Integer reportId);

    ServerResponse changePublicity(Integer reportId, boolean publicity);

    String downloadOriginSong(Integer songId);

    ServerResponse getReportDynamic(Integer pageNum, Integer pageSize, String keyword,Integer uid,Integer roleId);

    ServerResponse u3dInsertReport(Report report);

    ServerResponse delSong(Integer songId);

    ServerResponse getIndexSong();

    ServerResponse getExperimentReport(User user,Integer pageNum, Integer pageSize, String keywords);

    ServerResponse updateSong(Song song,List<Lyrics> lyricsList);

    User loginUser(User u);

    Integer uploadLyric(List<Lyrics> lyricsList);

    List<U3DLyrics> getLyrics(Integer songId);

    ServerResponse adminComment(ExperimentReport experimentReport);
}
